From 97da42335e49d077d3ddff824ace1ca10ddf5395 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 7 Dec 2010 18:28:19 +0000 Subject: [PATCH] amd xsave: Enable SVM intercept for xsetbv instruction. SVM introduces an intercept control bit for xsetbv instruction. This patches enables xsetbv intercept for SVM. Signed-off-by: Wei Huang --- xen/arch/x86/hvm/svm/emulate.c | 2 +- xen/arch/x86/hvm/svm/vmcb.c | 3 ++- xen/include/asm-x86/hvm/svm/vmcb.h | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/svm/emulate.c b/xen/arch/x86/hvm/svm/emulate.c index 87da614491..99dc83ad49 100644 --- a/xen/arch/x86/hvm/svm/emulate.c +++ b/xen/arch/x86/hvm/svm/emulate.c @@ -76,7 +76,7 @@ static unsigned long svm_nextrip_insn_length(struct vcpu *v) /* (exitcodes 84-95) are reserved */ case VMEXIT_IDTR_READ ... VMEXIT_TR_WRITE: case VMEXIT_RDTSC ... VMEXIT_MSR: - case VMEXIT_VMRUN ... VMEXIT_MWAIT_CONDITIONAL: + case VMEXIT_VMRUN ... VMEXIT_XSETBV: /* ...and the rest of the #VMEXITs */ case VMEXIT_CR0_SEL_WRITE: case VMEXIT_EXCEPTION_BP: diff --git a/xen/arch/x86/hvm/svm/vmcb.c b/xen/arch/x86/hvm/svm/vmcb.c index 1cd81d7786..1e55e8ccdc 100644 --- a/xen/arch/x86/hvm/svm/vmcb.c +++ b/xen/arch/x86/hvm/svm/vmcb.c @@ -127,7 +127,8 @@ static int construct_vmcb(struct vcpu *v) GENERAL2_INTERCEPT_VMLOAD | GENERAL2_INTERCEPT_VMSAVE | GENERAL2_INTERCEPT_STGI | GENERAL2_INTERCEPT_CLGI | GENERAL2_INTERCEPT_SKINIT | GENERAL2_INTERCEPT_MWAIT | - GENERAL2_INTERCEPT_WBINVD | GENERAL2_INTERCEPT_MONITOR; + GENERAL2_INTERCEPT_WBINVD | GENERAL2_INTERCEPT_MONITOR | + GENERAL2_INTERCEPT_XSETBV; /* Intercept all debug-register writes. */ vmcb->dr_intercepts = ~0u; diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h b/xen/include/asm-x86/hvm/svm/vmcb.h index 10ff3945a0..fd481005ca 100644 --- a/xen/include/asm-x86/hvm/svm/vmcb.h +++ b/xen/include/asm-x86/hvm/svm/vmcb.h @@ -76,7 +76,8 @@ enum GenericIntercept2bits GENERAL2_INTERCEPT_WBINVD = 1 << 9, GENERAL2_INTERCEPT_MONITOR = 1 << 10, GENERAL2_INTERCEPT_MWAIT = 1 << 11, - GENERAL2_INTERCEPT_MWAIT_CONDITIONAL = 1 << 12 + GENERAL2_INTERCEPT_MWAIT_CONDITIONAL = 1 << 12, + GENERAL2_INTERCEPT_XSETBV = 1 << 13 }; -- 2.30.2